package gestorbienraizok.inmuebles;

import gestorBD.Controlador;
import java.util.LinkedList;


public class Torre {

    byte numeroDeTorre;
    byte numeroPisos;
    byte numeroAptosPorPiso;
    int numeroDeAscensores;
    LinkedList<Apartamento> listaDeApartamentos;

    public Torre() {

    }

    public Torre(byte numeroDeTorre, byte numeroPisos, byte numeroAptosPorPiso, int numeroAscensores) {
        this.numeroDeTorre = numeroDeTorre;
        this.numeroPisos = numeroPisos;
        this.numeroAptosPorPiso = numeroAptosPorPiso;
        this.numeroDeAscensores = numeroAscensores;
        this.listaDeApartamentos = new LinkedList();
    }

    public byte getNumeroDeTorre() {
        return this.numeroDeTorre;
    }

    public byte getNumeroPisos() {
        return this.numeroPisos;
    }

    public byte getNumeroAptosPorPiso() {
        return this.numeroAptosPorPiso;
    }

    public int getAscensor() {
        return this.numeroDeAscensores;
    }

    public LinkedList<Apartamento> getListaDeApartamentos() {
        return this.listaDeApartamentos;
    }

    public void setNumeroDeTorre(byte numeroDeTorre) {
        this.numeroDeTorre = numeroDeTorre;
    }

    public void setNumeroPisos(byte numeroPisos) {
        this.numeroPisos = numeroPisos;
    }

    public void setNumeroAptosPorPiso(byte numeroAptosPorPiso) {
        this.numeroAptosPorPiso = numeroAptosPorPiso;
    }

    public void setAscensor(int numeroAscensores) {
        this.numeroDeAscensores = numeroAscensores;
    }

    public void setListaDeApartamentos(LinkedList<Apartamento> listaDeApartamentos) {
        this.listaDeApartamentos = listaDeApartamentos;
    }

    public int getNumeroDeApartamentos() {
        return this.listaDeApartamentos.size();
    }

    public void agregarApartamento(Apartamento apartamento) {
        this.listaDeApartamentos.add(apartamento);
    }

    public static Torre buscarTorrePorCodigoDeApartamento(String codigoDelApartamento) {
        for (int i = 0; i < Controlador.getListaDeUnidades().size(); i++) {
            LinkedList<Torre> estaListaDeTorres = Controlador.getListaDeUnidades().get(i).getListaDeTorres();
            for (int j = 0; j < estaListaDeTorres.size(); j++) {
                Torre estaTorre = estaListaDeTorres.get(j);
                LinkedList<Apartamento> estaListaDeAptos = estaTorre.getListaDeApartamentos();
                for (int k = 0; k < estaListaDeAptos.size(); k++) {
                    Apartamento esteApto = estaListaDeAptos.get(k);
                    if (esteApto.getCodigo().equalsIgnoreCase(codigoDelApartamento)) {
                        return estaTorre;
                    }
                }
            }
        }
        return null;

    }

    public static Torre buscarTorre(Unidad unidad, byte numeroDeTorre) {
        LinkedList<Torre> listaDeTorres = unidad.getListaDeTorres();
        for (int i = 0; i < listaDeTorres.size(); i++) {
            Torre estaTorre = listaDeTorres.get(i);
            if (numeroDeTorre == estaTorre.getNumeroDeTorre()) {
                return estaTorre;
            }
        }
        return null;
    }

    @Override
    public String toString() {
        String descripcion = new String();
        descripcion += "Número de la torre:      " + this.numeroDeTorre + "\n";
        descripcion += "Número de pisos:         " + this.numeroPisos + "\n";
        descripcion += "Apartamentos por piso:   " + this.numeroAptosPorPiso + "\n";
        descripcion += "Ascensores:              " + this.numeroDeAscensores + "\n\n";
        return descripcion;
    }
}
